{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# PyTorch练习1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#请输出你的姓名\n",
    "print('范煜')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 使用tensor与自动求导编写并训练一个线性回归器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.9.0\n"
     ]
    }
   ],
   "source": [
    "import torch\n",
    "print(torch.__version__)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "#生成训练数据\n",
    "x = torch.rand(30,2)*10 - 5 \n",
    "w0 = torch.tensor([2,-1],dtype = torch.float32)\n",
    "b0 = torch.tensor([1.7],dtype = torch.float32)\n",
    "y = torch.matmul(x,w0) + b0 + torch.randn(30) #受随机噪声污染的y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\user\\AppData\\Local\\Temp/ipykernel_10772/1116532129.py:7: MatplotlibDeprecationWarning: Axes3D(fig) adding itself to the figure is deprecated since 3.4. Pass the keyword argument auto_add_to_figure=False and use fig.add_axes(ax) to suppress this warning. The default value of auto_add_to_figure will change to False in mpl3.5 and True values will no longer work in 3.6.  This is consistent with other Axes classes.\n",
      "  ax = Axes3D(fig, elev=45, azim=100)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x216 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "from mpl_toolkits.mplot3d import Axes3D\n",
    "xarr = x.numpy()\n",
    "yarr = y.numpy()\n",
    "fig = plt.figure(0, figsize=(4, 3))\n",
    "plt.clf()\n",
    "ax = Axes3D(fig, elev=45, azim=100)\n",
    "ax.scatter(x[:, 0], x[:, 1], y)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([ 1.8992, -0.8554], requires_grad=True) tensor([1.7985], requires_grad=True)\n"
     ]
    }
   ],
   "source": [
    "#编写模型并训练\n",
    "def lineReg(x,w,b):\n",
    "    y = torch.matmul(x,w)+b\n",
    "    return y\n",
    "def lossf(y,y_hat):\n",
    "    squared_errors = (y-y_hat)**2\n",
    "    loss = squared_errors.mean()\n",
    "    return loss\n",
    "w0.requires_grad = True\n",
    "b0.requires_grad = True\n",
    "optimizer = torch.optim.SGD([w0,b0],lr = 0.1)\n",
    "epoch = 30\n",
    "for i in range(epoch):\n",
    "    optimizer.zero_grad()\n",
    "    y_pred = lineReg(x,w0,b0)\n",
    "    loss = lossf(y,y_pred)\n",
    "    loss.backward()\n",
    "    optimizer.step()\n",
    "print(w0,b0)\n",
    "\n",
    "\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
